package cn.glinks.liuhe.base;


import android.content.Context;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.view.KeyEvent;
import android.view.Window;

import butterknife.ButterKnife;
import butterknife.Unbinder;
import cn.glinks.liuhe.BuildConfig;
import cn.glinks.liuhe.R;
import cn.glinks.liuhe.app.AppManager;
import cn.glinks.liuhe.baserx.RxManager;
import cn.glinks.liuhe.utils.ChangeModeController;
import cn.glinks.liuhe.utils.ToastUtils;
import cn.glinks.liuhe.widget.LoadingDialog;
import cn.glinks.liuhe.widget.StatusBarCompat;

/**
 * 基类
 */

/***************使用例子*********************/
//public class SampleActivity extends BaseActivity {
//    @Override
//    public int getLayoutId() {
//        return R.layout.activity_news_channel;
//    }
//
//    @Override
//    public void initView() {
//    }
//}
public abstract class BaseActivity extends AppCompatActivity {
    public Context mContext;

    public RxManager mRxManager;

    public Unbinder mUnbinder;// ButterKnife解绑对象
    public Handler mMainHandler = null;// 主线程Handler

        @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // 初始化主线程Handler
        mMainHandler = new Handler(Looper.getMainLooper());

        mRxManager=new RxManager();

        doBeforeSetcontentView();
        setContentView(getLayoutId());
        doAfterSetContentView();

        mUnbinder = ButterKnife.bind(this);//ButterKnife绑定

        mContext = this;

        this.initView(savedInstanceState);
    }

    /**
     * 设置layout前配置
     */
    public void doBeforeSetcontentView() {
        //设置昼夜主题
        initTheme();
        // 把actvity放到application栈中管理
        AppManager.getAppManager().addActivity(this);
        // 无标题
        supportRequestWindowFeature(Window.FEATURE_NO_TITLE);// 用于AppCompatActivity
        //requestWindowFeature(Window.FEATURE_NO_TITLE);// 用于Activity
        // 设置竖屏
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        // 默认着色状态栏
        SetStatusBarColor();
    }


    /**
     * 设置layout后配置
     */
    public void doAfterSetContentView() {
    }

    /*********************子类实现*****************************/
    //获取布局文件
    public abstract int getLayoutId();
    //初始化view
    public abstract void initView(Bundle savedInstanceState);


    /**
     * 设置主题
     */
    private void initTheme() {
        ChangeModeController.setTheme(this, R.style.DayTheme, R.style.NightTheme);
    }
    /**
     * 着色状态栏（4.4以上系统有效）
     */
    protected void SetStatusBarColor(){
        StatusBarCompat.setStatusBarColor(this, ContextCompat.getColor(this,R.color.colorPrimary));
    }
    /**
     * 着色状态栏（4.4以上系统有效）
     */
    protected void SetStatusBarColor(int color){
        StatusBarCompat.setStatusBarColor(this,color);
    }
    /**
     * 沉浸状态栏（4.4以上系统有效）
     */
    protected void SetTranslanteBar(){
        StatusBarCompat.translucentStatusBar(this);
    }



    /**
     * 通过Class跳转界面
     **/
    public void startActivity(Class<?> cls) {
        startActivity(cls, null);
    }

    /**
     * 通过Class跳转界面
     **/
    public void startActivityForResult(Class<?> cls, int requestCode) {
        startActivityForResult(cls, null, requestCode);
    }

    /**
     * 含有Bundle通过Class跳转界面
     **/
    public void startActivityForResult(Class<?> cls, Bundle bundle,
                                       int requestCode) {
        Intent intent = new Intent();
        intent.setClass(this, cls);
        if (bundle != null) {
            intent.putExtras(bundle);
        }
        startActivityForResult(intent, requestCode);
    }

    /**
     * 含有Bundle通过Class跳转界面
     **/
    public void startActivity(Class<?> cls, Bundle bundle) {
        Intent intent = new Intent();
        intent.setClass(this, cls);
        if (bundle != null) {
            intent.putExtras(bundle);
        }
        startActivity(intent);
    }

    /**
     * 开启浮动加载进度条
     */
    public void startProgressDialog() {
        LoadingDialog.showDialogForLoading(this);
    }

    /**
     * 开启浮动加载进度条
     *
     * @param msg
     */
    public void startProgressDialog(String msg) {
        LoadingDialog.showDialogForLoading(this, msg, true);
    }

    /**
     * 停止浮动加载进度条
     */
    public void stopProgressDialog() {
        LoadingDialog.cancelDialogForLoading();
    }

    /**
     * 短暂显示Toast提示(来自String)
     **/
    public void showShortToast(String text) {
        ToastUtils.showShort(text);
    }

    /**
     * 短暂显示Toast提示(id)
     **/
    public void showShortToast(int resId) {
        ToastUtils.showShort(resId);
    }

    /**
     * 长时间显示Toast提示(来自res)
     **/
    public void showLongToast(int resId) {
        ToastUtils.showLong(resId);
    }

    /**
     * 长时间显示Toast提示(来自String)
     **/
    public void showLongToast(String text) {
        ToastUtils.showLong(text);
    }
    /**
     * 网络访问错误提醒
     */
    public void showNetErrorTip() {
        ToastUtils.showShort("网络访问错误，请稍后再试");
    }
    public void showNetErrorTip(String error) {
        ToastUtils.showShort(error);
    }
    @Override
    protected void onResume() {
        super.onResume();
        //debug版本不统计crash
        if(!BuildConfig.LOG_DEBUG) {
            //友盟统计
            //MobclickAgent.onResume(this);
        }
    }

    @Override
    protected void onPause() {
        super.onPause();
        //debug版本不统计crash
        if(!BuildConfig.LOG_DEBUG) {
            //友盟统计
            //MobclickAgent.onPause(this);
        }
    }


    @Override
    protected void onDestroy() {
        super.onDestroy();
        mRxManager.clear();
        mUnbinder.unbind();// ButterKnife解绑
        mMainHandler.removeCallbacksAndMessages(null);// 释放mMainHandler的资源,避免内存泄漏
        AppManager.getAppManager().finishActivity(this);
    }

    /**
     * 监听主页键,返回键
     *
     * @param keyCode
     * @param event
     * @return
     */
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            // 放入后台
            moveTaskToBack(false);
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }
}
